package com.liujit.upms.service;

import cn.hutool.core.lang.tree.Tree;
import com.baomidou.mybatisplus.extension.service.IService;
import com.liujit.common.domain.params.BaseParams;
import com.liujit.common.domain.result.PageBean;
import com.liujit.upms.domain.model.SysMenu;
import com.liujit.upms.domain.params.SysMenuParams;
import com.liujit.upms.domain.query.SysMenuQuery;
import com.liujit.upms.domain.query.SysMenuTreeQuery;
import com.liujit.upms.domain.result.SysMenuResult;

import java.util.List;

/**
 * @Description 系统菜单Service
 * @Author liujun
 * @Date 2021-07-02 14:59:44
 */
public interface SysMenuService extends IService<SysMenu> {

    /**
     * 根据系统菜单分页查询条件，分页查询系统菜单列表
     *
     * @param query 系统菜单分页查询条件
     * @return 分页列表结果
     * @author: liujun
     * @date: 2021/6/23 5:02 下午
     */
    PageBean<SysMenuResult> getPage(SysMenuQuery query);

    /**
     * 根据系统菜单添加/修改请求参数，添加/修改系统菜单
     *
     * @param params 系统菜单添加/修改请求参数
     * @return 添加/修改结果
     * @author: liujun
     * @date: 2021-07-02 14:59:44
     */
    Boolean save(SysMenuParams params);

    /**
     * 根据系统菜单id，查询系统菜单
     *
     * @param id 系统菜单id
     * @return 查询结果
     * @author: liujun
     * @date: 2021-07-02 14:59:44
     */
    SysMenuResult get(Long id);

    /**
     * 根据系统菜单id，查询系统菜单详情
     *
     * @param id 系统菜单id
     * @return 菜单详情
     * @author: liujun
     * @date: 2021/7/8 9:24 上午
     */
    SysMenuResult getDetail(Long id);

    /**
     * 根据系统菜单删除请求参数，删除系统菜单
     *
     * @param params 系统菜单删除请求参数
     * @return 删除结果
     * @author: liujun
     * @date: 2021-07-02 14:59:44
     */
    Boolean del(BaseParams params);

    /**
     * 根据系统菜单启用请求参数，启用系统菜单
     *
     * @param params 系统菜单启用请求参数
     * @return 启用结果
     * @author: liujun
     * @date: 2021-07-02 14:59:44
     */
    Boolean enabled(BaseParams params);

    /**
     * 根据系统菜单禁用请求参数，禁用系统菜单
     *
     * @param params 系统菜单禁用请求参数
     * @return 禁用结果
     * @author: liujun
     * @date: 2021-07-02 14:59:44
     */
    Boolean disabled(BaseParams params);

    /**
     * 根据用户id， 获取菜单列表
     *
     * @param userId     用户id
     * @param superAdmin 是否是超级管理员
     * @return 菜单列表
     * @author: liujun
     * @date: 2021/7/4 10:01 上午
     */
    List<SysMenu> getByUserId(Long userId, boolean superAdmin);

    /**
     * 获取树形结构
     *
     * @param query 系统菜单树查询条件
     * @return
     * @author: liujun
     * @date: 2021/7/4 9:41 下午
     */
    List<Tree<Long>> getTree(SysMenuTreeQuery query);

    /**
     * 根据系统角色id查询系统角色菜单列表
     *
     * @param roleId 系统角色id
     * @return 系统角色菜单列表
     * @author: liujun
     * @date: 2021/6/23 5:02 下午
     */
    List<Long> getMenuIdByRoleId(Long roleId);

    /**
     * 根据角色id，菜单id修改，系统角色菜单
     *
     * @param roleId  角色id
     * @param ids 菜单id
     * @return 修改结果
     * @author: liujun
     * @date: 2021/6/23 5:03 下午
     */
    Boolean modifyRoleMenu(Long roleId, List<Long> ids);

    /**
     * 根据菜单id、URL权限标识，获取角色id列表
     *
     * @param menuId        菜单id
     * @param urlPermission URL权限标识
     * @return 角色id列表
     * @author: liujun
     * @date: 2021/7/2 10:29 下午
     */
    List<Long> getRoleIdByUrlPermission(Long menuId, String urlPermission);

    /**
     * 根据菜单id，获取菜单名称
     *
     * @param id 菜单id
     * @return 菜单名称
     * @author: liujun
     * @date: 2021/7/8 9:34 上午
     */
    String getNameById(Long id);
}
